home *** CD-ROM | disk | FTP | other *** search
- // TREE.HPP - interface definition for in-memory balanced binary trees
-
- #ifndef _TREE_HPP
- #define _TREE_HPP
-
- #include <stddef.h>
-
- class TREE
- {
- private:
- struct NODE
- {
- struct node *left, *right;
- unsigned int balance;
- size_t dsize; // size of the data area
- void *data;
- } NODE;
-
- typedef enum tree_err
- {
- OK,
- MEM_ALLOC_FAIL,
- NO_DUPES,
- TREE_EMPTY,
- NO_SUCH_NODE
- } TREE_ERR;
-
- NODE *head;
- NODE *current;
- TREE_ERR errval; // error value produced by last operation
-
- void delete_subtree(NODE *nodeptr);
- void rebalance(NODE *parent);
- int addnode(NODE *parent, NODE *newnode);
- NODE *findnode(NODE *currnode, void *key);
- int remove_node(NODE *currnode, void *key);
- int getnext(NODE *currnode);
- int getprev(NODE *currnode);
- protected:
- virtual void alloc_data(NODE *nptr);
- virtual void copy_data(NODE *to, void *from);
- virtual void delete_data(NODE *nptr);
- virtual int compare(void *data1, void *data2, size_t size);
- public:
- TREE(void);
- ~TREE(void);
- add(void *data, size_t size);
- remove(void *data);
- void *find(void *data);
- void *findfirst(void);
- void *findnext(void);
- void *findlast(void);
- void *findprev(void);
- void *findcurr(void) {return current->data;}
- void print_tree(void);
- TREE_ERR last_error(void) {return errval;}
- };
-
- #endif // ifndef _TREE_HPP
-